package com.example.rwq_test.util;


import org.bytedeco.javacpp.*;

import java.io.File;

/**
* @Author: dingdang4D
* 
* @Date: Created in  2024/09/21 05:36
* @Description: OpenCv工具类
**/
public class OpenCvUtil {
    public static void main(String[] args) {
        // 图像文件路径
        String imagePath = "/home/dingdang4d/Documents/JavaProject/learn/rwq_test/微信图片_20240922102931.jpg";

        // 检查文件是否存在
        File file = new File(imagePath);
        if (!file.exists()) {
            System.out.println("File does not exist: " + imagePath);
            return;
        }

        opencv_core.Mat mat = opencv_imgcodecs.imread(imagePath, opencv_imgcodecs.IMREAD_COLOR);
        opencv_imgproc.cvtColor(mat, mat, opencv_imgproc.CV_BGR2BGRA);

        byte[] bgr = new byte[3];

        for (int i = 0; i < mat.cols(); i++) {
            for (int j = 0; j < mat.rows(); j++) {
                mat.ptr(j, i).get(bgr);
                if (bgr[1] >= (byte) 250) {
                    //地图未知区域
                    mat.ptr(j, i).put(bgr[0], bgr[1], bgr[2], (byte) 0);
                }
            }
        }
        opencv_imgcodecs.imwrite("mat.jpg", mat);








        // 加载图像
//        opencv_core.Mat bgrImage = opencv_imgcodecs.imread(imagePath, opencv_imgcodecs.IMREAD_COLOR);
////        opencv_core.Mat bgraImage = new opencv_core.Mat(bgrImage.size(), opencv_core.CV_8UC4);
//        opencv_imgproc.cvtColor(bgrImage, bgrImage, opencv_imgproc.CV_BGR2GRAY);
//
//        // 获取图像尺寸
//        int width = bgrImage.cols();
//        int height = bgrImage.rows();
//
//
//        // 获取图像数据指针
//        BytePointer data = bgrImage.data();
//
//        // 遍历图像中的每个像素
//        for (int y = 0; y < height; y++) {
//            for (int x = 0; x < width; x++) {
//                // 计算当前像素的偏移量
//                int offset = (y * width + x) * 4;
//
//                // 获取绿色分量
//                byte green = data.position(offset + 1).get();
//
//                // 如果绿色分量大于 250，则将 alpha 设置为 0（完全透明）
//                if (green > 250) {
//                    data.position(offset + 3).put((byte) 0);  // 设置 alpha 通道
//                }
//            }
//        }
//
//        // 保存处理后的图像
//        opencv_imgcodecs.imwrite("output_image.png", bgrImage);











//        opencv_core.Mat src = opencv_imgcodecs.imread(imagePath, opencv_imgcodecs.IMREAD_COLOR);
//        opencv_imgproc.cvtColor(src, src, opencv_imgproc.CV_BGR2GRAY);

//        System.out.println(src.cols() + " : " + src.rows());
//        byte b = (byte) 255;
//
//        // 获取图像数据指针
//        for (int i = 0; i < src.cols(); i++) {
//            for (int j = 0; j < src.rows(); j++) {
//                //正确
//                BytePointer ptr = src.ptr(j, i);
//
//                if (ptr.get(1) > (byte) 240) {
//                    ptr.put(ptr.get(0), ptr.get(1), ptr.get(2), (byte) 0);
//                }
//            }
//        }
//
//        opencv_imgcodecs.imwrite("src.jpg", src);
//
//        // 检查图像是否成功加载
//        if (src.empty()) {
//            System.out.println("Could not open or find the image.");
//        } else {
//            // 保存图像
//            boolean success = opencv_imgcodecs.imwrite("src.jpg", src);
//            if (success) {
//                System.out.println("Image loaded and saved successfully with size: " + src.size());
//            } else {
//                System.out.println("Failed to save the image.");
//            }
//        }
    }
}
